package top.ninwoo.weixingsim.service;

import top.ninwoo.weixingsim.entity.SimData;
import top.ninwoo.weixingsim.entity.WeiXingData;

import java.util.List;

/**
 * 拓扑网络的服务
 * 根据Weixing的服务所得到的List转化为二维数组
 */

public interface Toponet {

    /**
     * @param weiXingDataList WeiXingData对象
     * @return 拓扑图的元素
     * @description 得到生成拓扑网络中的所有元素名字，需要自动生成所需的ovs，和docker容器一一对应
     */
    String[] getAppNames(List<WeiXingData> weiXingDataList);

    /**
     * @param weiXingDataList WeiXingData对象
     * @return 二维数组，也就是拓扑图
     * @description 得到网络拓扑形式类似为 app1 app2 app3 ovs1 ovs2 ovs3
     */
    int[][] getTopology(List<WeiXingData> weiXingDataList, SimData simData);

    /**
     * @param a 具体的卫星a
     * @param b 具体的卫星b
     * @return a，b之间的距离
     * @description 计算距离，在getTopology中调用
     */
    Double distance(WeiXingData a, WeiXingData b);

    Double channelCapacity(WeiXingData a, WeiXingData b,SimData simData);

    /**
     @description 记录卫星拓扑的变化历史
     */
    /**
     * @description 写入一个文本文件中，作为拓扑的历史记录
     * @param appNames 传入的卫星名字，取前1/2
     * @param topo 卫星拓扑图
     */
    void history(String[] appNames,int[][] topo);

    /**
     * @description 删除历史记lu
     */
    void delHistory();
}
